
package Offline;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JProgressBar;

/**
 * @author Alvaro Garcia Tapia
 * @author Pablo Mosquera Diaz
 * @author Victor Navarro Ortego
 * @author Adrian Neila Serrano
 * @author Daniel Sanchez Suarez
 * 
 * @proyecto Gestor de Tareas Online
 * @version 1.61
 */
public class Usuario {
    String nombre = "";
    private List<Lista> listas = new ArrayList<Lista>();
    boolean modificado = false;
    private String [] borrados = new String[1000];
    int BORRADOS = 0;
    private boolean cancelar = false;
    
    public Usuario(String nombre){
        this.nombre = nombre;
    }
    
    /**
     * Añade una lista a la clase usuario
     * @param lista 
     */
    public void addlista(Lista lista){
        listas.add(lista);
        modificado = true;
    }
    
    /**
     * Devuelve la lista pedida e indica si es para modificar
     * @param num
     * @param modificar
     * @return Lista
     */
    public Lista getlista(int num,boolean modificar){
        modificado = modificar || modificado;
        return listas.get(num);
    }
    
    /**
     * Metodo que devuelve el nombre de todas las listas
     * @return Listas[]
     */
    public String[] getlistas(){
        String [] lists = new String[100];
        Iterator<Lista> iterador = listas.iterator();
        for(int i = 0;iterador.hasNext();i++){
            lists[i]=iterador.next().nombre;
        }
        return lists;
    }
    
    
    /**
     * Elimina una lista de la clase Usuario
     * @param num 
     */
    public void removelista(int num){
        borrados[BORRADOS]=listas.get(num).nombre;
        BORRADOS++;
        listas.remove(num);
        modificado = true;
    }
    
    /**
     * Devuelve los nombres de todas las listas borradas
     * @return String[]
     */
    public String[] getborrados(){
        return borrados;
    }
    
    
    /**
     * Metodo que imprime en un archivo indicado los datos del usuario
     * @param fichero
     * @param barra
     * @param frame 
     */
    public void Imprimir(FileWriter fichero,JProgressBar barra, JFrame frame){
        
        PrintWriter archivo = new PrintWriter(fichero);
        Iterator<Lista> iterador = listas.iterator();
        int progreso = 0;
        while(iterador.hasNext() && !this.cancelar){
            Lista list = iterador.next();
            archivo.println("--------------------------------------");
            archivo.println("\t"+list.nombre);
            archivo.println("--------------------------------------");
            Iterator<Tarea> iterad = list.tareas.iterator();
            
            int i = 0;
            while (iterad.hasNext() && !this.cancelar){
                i++;
                String texto = " ";
                String fecha = "";
                Tarea tar = iterad.next();
                if (tar.favorito.equals("1"))
                    texto = "*";
                if (tar.fecha == null)
                    fecha = "0000-00-00";
                else
                    fecha = tar.fecha;
                archivo.println("    -"+texto+" "+tar.nombre+"\t"+fecha+"\t"+tar.tiempo+" días");
            }
            
            //Para probar el cancelar del status bar
            /*try {
                Thread.currentThread().sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            }*/
            
            if (i==0  && !this.cancelar)
                archivo.println("No existen tareas en esta lista.");
            
            if (!this.cancelar){
                progreso++;
                barra.setValue(progreso);
                frame.repaint();
            }
            archivo.println();
            archivo.println("**********************************************************************************");
        }
        try {
            frame.setVisible(false);
            frame.setDefaultCloseOperation(2); 
            fichero.close();
        } catch (IOException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }        
        
    /**
     * Metodo que cancela las acciones del metodo Imprimir()
     */
    public void Cancelar(){
        this.cancelar = true;
    }
    
}
